<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('contracts', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联信息
            $table->unsignedBigInteger('employee_id'); // 员工ID
            $table->string('employee_name', 100)->nullable(); // 员工姓名
            $table->string('employee_number', 50)->nullable(); // 员工工号

            // 合同基本信息
            $table->string('contract_number', 100)->unique(); // 合同编号
            $table->string('contract_type', 20); // 合同类型：labor, service, consultancy, etc.
            $table->string('contract_category', 20)->nullable(); // 合同类别：formal, probation, fixed_term, etc.

            // 合同期限
            $table->date('start_date'); // 合同开始日期
            $table->date('end_date'); // 合同结束日期
            $table->integer('contract_period_months')->nullable(); // 合同期限（月）
            $table->boolean('is_open_ended')->default(false); // 是否无固定期限

            // 薪资信息
            $table->decimal('monthly_salary', 10, 2)->nullable(); // 月薪
            $table->decimal('annual_salary', 10, 2)->nullable(); // 年薪
            $table->string('salary_currency', 10)->default('CNY'); // 薪资货币
            $table->string('salary_grade', 20)->nullable(); // 薪资等级

            // 福利待遇
            $table->json('benefits')->nullable(); // 福利待遇
            $table->json('allowances')->nullable(); // 津贴补贴
            $table->json('insurance')->nullable(); // 保险信息

            // 工作信息
            $table->string('position', 100)->nullable(); // 岗位
            $table->string('department', 100)->nullable(); // 部门
            $table->string('work_location', 100)->nullable(); // 工作地点
            $table->json('working_hours')->nullable(); // 工作时间
            $table->string('probation_period', 20)->nullable(); // 试用期

            // 合同条款
            $table->text('responsibilities')->nullable(); // 工作职责
            $table->text('confidentiality_clause')->nullable(); // 保密条款
            $table->text('non_compete_clause')->nullable(); // 竞业条款
            $table->text('termination_clause')->nullable(); // 终止条款
            $table->text('other_terms')->nullable(); // 其他条款

            // 续约信息
            $table->boolean('is_renewable')->default(true); // 是否可续约
            $table->integer('max_renewals')->nullable(); // 最多续约次数
            $table->integer('renewal_count')->default(0); // 已续约次数
            $table->string('renewal_status', 20)->default('active'); // 续约状态：active, renewed, not_renewed, expired

            // 到期提醒
            $table->integer('reminder_days')->default(30); // 提前提醒天数
            $table->boolean('reminder_sent')->default(false); // 是否已发送提醒
            $table->date('last_reminder_date')->nullable(); // 最后提醒日期

            // 签署信息
            $table->string('signed_by_employee')->nullable(); // 员工签署人
            $table->date('signed_by_employee_date')->nullable(); // 员工签署日期
            $table->string('signed_by_company')->nullable(); // 公司签署人
            $table->date('signed_by_company_date')->nullable(); // 公司签署日期
            $table->string('witness')->nullable(); // 见证人
            $table->date('witness_date')->nullable(); // 见证日期

            // 审批信息
            $table->string('approved_by', 100)->nullable(); // 审批人
            $table->date('approved_at')->nullable(); // 审批时间
            $table->text('approval_notes')->nullable(); // 审批备注

            // 状态信息
            $table->string('status', 20)->default('draft'); // 状态：draft, active, terminated, expired, suspended
            $table->date('termination_date')->nullable(); // 终止日期
            $table->text('termination_reason')->nullable(); // 终止原因
            $table->string('terminated_by', 100)->nullable(); // 终止操作人

            // 附件信息
            $table->json('attachments')->nullable(); // 相关附件

            // 扩展字段
            $table->json('custom_fields')->nullable(); // 自定义字段
            $table->text('notes')->nullable(); // 备注

            // 统计信息
            $table->integer('version')->default(1); // 版本号
            $table->boolean('is_latest')->default(true); // 是否最新版本

            // 索引
            $table->index(['employee_id']);
            $table->index(['contract_number']);
            $table->index(['contract_type']);
            $table->index(['start_date']);
            $table->index(['end_date']); // 到期提醒索引
            $table->index(['status']);
            $table->index(['renewal_status']);
            $table->index(['reminder_sent']);
            $table->index(['is_latest']);

            // 外键约束
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('contracts');
    }
};
